#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//返回类型  函数名     形式参数
    int      Add   (int d, int e)
{
	int f = 0;
	f= d + e;//  函数体
	return f;
}
 /*int Add(int d, int e)
 {
	 return d + e;
 }*/

void print(void)//void print ()
{
	printf("hello\n");
}
int wext()
{
	printf("yes\n");
	return 1;
	printf("ok\n");
}

k()//返回类型没写，默认为int
{
	return(3.14);
}

int m()
{
	printf("hi\n");
}

//            收数组  收一个参数  收另一个参数
void set_arr(int arr[], int sz,    int set)
{
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		arr[i] = set;
	}
}             // 形参
void print_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}printf("\n");
}

void print1(int att[][5], int p, int q)
{
	int i = 0;
	for (i = 0;i < p;i++)
	{
		int j = 0;
		for (j = 0;j < q;j++)
			printf("%d ", att[i][j]);
		printf("\n");
	}
}


int is_leap_year(int y)//或者bool is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))//双目条件判断符两边表达式要括号
	{
		return 1;//return ture;
	}
	else return 0;//return false;
}
int get_days_of_month_of_year(int y, int m)
{
	//                  29
	int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	//             0 1  2  3  4  5  6  7  8  9  10 11 12
	int day = days[m];//或者if (is_leap_year(y) && m == 2)
	if (is_leap_year(y) == 1 && m == 2)//"="赋值  "=="判断相等
		day++;
	return day; 
}


int main()
{
	int a = _CRT_INT_MAX;
	int b = 2147483646;
	int c = 2147483646;
	//int avg = (b + c) / 2;
	int avg = b + (a - b) / 2;
	printf("%d\n", avg);

	int g = 0;
	int h = 0;
	scanf("%d %d", &g, &h);
	int i = Add(g, h);//Add()干事框架
	printf("%d\n", i);

	print();

	int j = wext();
	printf("%d\n", j);

	int l = k();
	printf("%d\n", l);

	int n = m();
	printf("%d\n", n);

	  // 是实参
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//      也是实参
	print_arr(arr, sz);
	//    传数组 传个参数 传另一个参数
	set_arr(arr,   sz,        -1);
	print_arr(arr, sz);

	int att[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };
	print1(att, 3, 5);
	//数组在函数中，实参用数组名，形参用数组
	// 形参的数组里只有二维数组的列不能省略，其它的都可以省略
	//函数功能设计单一可复用
	//数组传参时形参的数组和实参的数组是同一个数组

	int year = 0;
	int month = 0;
	scanf("%d %d", &year, &month);
	int day = get_days_of_month_of_year(year, month);
	printf("%d\n", day);

	//打印的内容不是返回的值，先打印函数干事完函数再返回值，printf函数返回的值是打印出字符的个数
	int aa = printf("hehe\n");//打印出了"hehe"还有"换行符"共5个字符
	printf("%d\n", aa);
	printf("%d\n", printf("%d", printf("%d", 43)));//4321
	printf("%d", printf("%d ", printf("%d ", 43)));//43 3 2

	return 0;
}

//1

////函数或者变量都要满足:先声明后使用
////遇到声明后的函数便可跳，声明只是让它会跳就行
//int is_leap_year(int y);//或者int is_leap_year(int)
////函数的声明中，形参的名字可以省略
//
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	if (is_leap_year(year))
//		printf("%d是闰年\n", year);
//	else
//		printf("%d不是闰年\n", year);
//
//	return 0;
//}
////函数的定义,一般都是定义声明一起完,函数的定义是一种特殊的声明
//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1;
//	else
//		return 0;
//}

//2求两点间的距离

// #include<math.h>
// int main()
// {
//     double x1, x2, y1, y2, x, y, distance;//这样不初始化创建变量更快
//     scanf("%lf %lf", &x1, &y1);
//     scanf("%lf %lf", &x2, &y2);
//     //调用函数 --> 函数名(参数,参数)
//     distance = sqrt(pow((x2-x1),2)+pow((y2-y1),2));
//                  //幂运算pow函数的使用              
//     printf("%.4lf", distance);
// 	return 0;
// }